﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using System.Collections;

namespace LCWMS
{
    public partial class  w_so069 : DockContent
    {
        DataSet dscustomer;
        DataSet ds_tran;
        Cursor currentCursor = Cursor.Current;

        public w_so069()
        {
            InitializeComponent();
            dgv_tran.AutoGenerateColumns = false;
        }



        //添加采购定单的合计行
        private void f_add_order()
        {
            //decimal d_1, d_2, d_3, d_4, d_5, d_6, d_7;
            //DataTable dt_put;
            ////增加一个合计行 
            //dt_put = (DataTable)dgv_tran.DataSource;
            //d_1 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["planqty"].ColumnName + ")", "true");
            //d_2 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["planamount"].ColumnName + ")", "true");
            //d_3 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["skuamount"].ColumnName + ")", "true");
            //d_4 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["shouldqty"].ColumnName + ")", "true");
            //d_5 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["allocateqty"].ColumnName + ")", "true");
            //d_6 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["allocateamount"].ColumnName + ")", "true");
            //d_7 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["shotqty"].ColumnName + ")", "true");
            //DataRow dr = dt_put.NewRow();
            //dr["barcode"] = "合计";
            //dr["planqty"] = d_1;
            //dr["planamount"] = d_2;
            //dr["skuamount"] = d_3;
            //dr["shouldqty"] = d_4;
            //dr["allocateqty"] = d_5;
            //dr["allocateamount"] = d_6;
            //dr["shotqty"] = d_7;
            //((DataTable)dgv_tran.DataSource).Rows.InsertAt(dr, ((DataTable)dgv_tran.DataSource).Rows.Count);
        }


        private void btn_Query_Click(object sender, EventArgs e)
        {

            lb_rows.Text = "总行数：0";

            // 设置为忙碌状态
            Cursor.Current = Cursors.WaitCursor;




            string str_sql = ""+
            " SELECT " +
            "   RTRIM(mw.warehouse) warehouse, " + // -- 部门编码
            "   RTRIM(mw.warehouse_name) warehouse_name,  " + // -- 部门名称
            "   RTRIM(b.sku) sku,  " + // -- 商品编码
            "   RTRIM(ms.sku_name) sku_name, " + //  -- 商品名称
            "   RTRIM(ms.pack_code) pack_code, " + //  -- 商品名称
            "   case ms.standby_3 when '10' then '正常' when'13' then '禁销'  when '20' then '预淘汰'  when '30' then '淘汰' when '0' then '新品' end standby_3,  " + // -- 生命周期状态
            "   RTRIM(ms.main_unit) main_unit,  " + // -- 单位
            "   CONVERT(INT, ISNULL(mp.qty02, 0)) box_spec , " + //  -- 进货规格(箱规)
            "   ISNULL(mp.unitsPerDelivery, 0) unitsPerDelivery, " + //  -- 配送规格
            "   round(isnull(b.allocate_qty_m, 0) - isnull(b.pick_qty_m, 0), 4) qty, " + //  -- 占用数量
            "   RTRIM(a.customer_code) customer_code, " + //  -- 占据门点号
            "   RTRIM(a.customer_name) customer_name, " + //  -- 占据门点名称
            "   RTRIM(a.so_no) so_no, " + //  -- 单据号
            "   RTRIM(ms.class_code3) class_code3, " + //  -- 类别编码
            "   RTRIM(msc3.class_name) as class_name3  " + // -- 类别名称
            " FROM WMS.so_ship_header a " +
            " inner join WMS.so_ship_detail b on a.inv_org= b.inv_org AND a.consignor= b.consignor AND a.so_no= b.so_no  " +
            " LEFT join WMS.so_ship_wavedetail c on a.inv_org = c.inv_org AND a.consignor = c.consignor  AND a.so_no = c.so_no  " +
            " LEFT JOIN wms.mst_sku ms on b.inv_org = ms.inv_org and b.consignor = ms.consignor and b.sku = ms.sku " +
            " LEFT JOIN wms.mst_pack mp on mp.inv_org = ms.inv_org and mp.consignor = ms.consignor and mp.sku = ms.sku and mp.pack_code = ms.pack_code " +
            " LEFT JOIN wms.mst_stat_class msc3 on msc3.inv_org = ms.inv_org and msc3.class_flag = 'C3'  and msc3.class_code = ms.class_code3 " +
            " left join wms.mst_location ml on ml.inv_org = ms.inv_org and ml.location_code = ms.fix_location " +
            " left join wms.mst_area ma on ml.inv_org = ma.inv_org and ml.area_code = ma.area_code " +
            " left join wms.mst_warehouse mw on ma.inv_org = mw.inv_org and ma.warehouse = mw.warehouse " +

            " WHERE 1=1  " +
            "   AND a.inv_org= '" + main.g_org + "'  " +
            "   AND a.so_flag= '0'  " +
            "   AND round(isnull(b.allocate_qty_m, 0) - isnull(b.pick_qty_m, 0), 4) > 0  " +
            "   AND CONVERT (VARCHAR (10), a.prepare_time, 102) = CONVERT (CHAR(10), getdate(), 102)  " +
            "";


            // 判断货主
            if (cb_consignor.Text.Trim() != "")
            {
                str_sql = str_sql + "and a.consignor = '" + cb_consignor.Text.Trim() + "' ";
            }

            // 判断库区
            if (tb_warehouse.Text.Trim() != "")
            {
                str_sql = str_sql + "and mw.warehouse = '" + tb_warehouse.Text.Trim() + "' ";
            }

            // 判断商品分类
            if (tb_class_name3.Text.Trim() != "")
            {
                str_sql = str_sql + "and msc3.class_name like '%" + tb_class_name3.Text.Trim() + "%' ";
            }

            ////// 判断商品码
            ////if (tb_sku.Text.Trim() != "")
            ////{
            ////    str_sql = str_sql + "and b.sku = '" + tb_sku.Text.Trim() + "' ";
            ////}

            //判断商品码
            if (tb_sku.Text.Trim() != "")
            {
                string[] skuList = tb_sku.Text.Trim().Split(',');
                string skuWhere = "";
                if (skuList.Length > 0)
                {
                    foreach (string item in skuList)
                    {
                        if (skuWhere == "")
                        {
                            skuWhere = "'" + item + "'";
                        }
                        else
                        {
                            skuWhere += ",'" + item + "'";
                        }
                    }
                    str_sql = str_sql + " and ms.sku in (" + skuWhere + ")";
                }

            }


            //判断门店号


            str_sql += " order by mw.warehouse,b.sku  ";
            try
            {
                if (main.dbtype == "SQL")
                {
                    ds_tran = main.dbservice.Sql_exec_selectsql(str_sql);
                }
                else
                {
                    ds_tran = main.dbservice.oracle_exec_selectsql(str_sql);
                }
                if (ds_tran.Tables[0].Rows.Count > 0)
                {
                    lb_rows.Text = "总行数：" + ds_tran.Tables[0].Rows.Count.ToString();
                    dgv_tran.DataSource = ds_tran.Tables[0];
                    //f_add_order();
                }
                else
                    dgv_tran.DataSource = null;
            }
            catch (System.Exception ee)
            {
                dgv_tran.DataSource = null;
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to Query", main.g_info_dataset) + "!" + ee.ToString());
            }
            Cursor.Current = currentCursor;
        }

        private void w_so064_Load(object sender, EventArgs e)
        {
            dscustomer = new DataSet();
            try
            {
                dscustomer = new DataSet();
                dscustomer = main.g_class.comm_get_consignor();
                cb_consignor.DataSource = dscustomer.Tables[0];
                cb_consignor.ValueMember = "consignor";
                cb_consignor.DisplayMember = "consignor";

                //语言转换
                main.g_class.comm_changeControl(this, main.g_win_dataset);
            }
            catch (System.Exception ee)
            {
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to initialize Information of transaction type", main.g_info_dataset) + "!" + ee.ToString());
                return;
            }

            //按钮权限控制
            string str_right;
            str_right = main.g_class.comm_getright("w_so069", main.g_right_dataset);


            //查询
            if (str_right.Substring(4, 1) == "0")
            {
                this.btn_Query.Visible = false;
            }

            else
            {
                this.btn_Query.Visible = true;
            }

            //导出ＥＸＣＥＬ
            if (str_right.Substring(5, 1) == "0")
            {
                this.btn_excel.Visible = false;
            }
            else
            {
                this.btn_excel.Visible = true;
            }

        }

       
        private void cb_consignor_TextChanged(object sender, EventArgs e)
        {
            string str_cust;
            str_cust = cb_consignor.Text.Trim();
            tb_cusname.Text = main.g_class.comm_findname(str_cust, dscustomer);
        }

     
        private void btn_excel_Click(object sender, EventArgs e)
        {
            if (dgv_tran.Rows.Count > 0)
            {
                main.g_class.DataGridViewToExcel(dgv_tran);
            }
        }


        //复制某一列值到剪贴板
        private void CopyColumnValueToClipboard(DataGridView dgv, int rowIndex, int columnIndex)
        {
            if (dgv.Rows.Count <= rowIndex || columnIndex < 0)
            {
                // 检查索引是否超出范围
                return;
            }

            string value = dgv.Rows[rowIndex].Cells[columnIndex].Value.ToString();
            if (value != null)
            {
                Clipboard.SetText(value);

                MessageBox.Show("已复制到剪贴板");
            }
        }

        private void dgv_tran_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int i_temp = dgv_tran.CurrentRow.Index;
            string str_name = dgv_tran.Columns[dgv_tran.CurrentCell.ColumnIndex].Name.ToString().Trim();
            //if (str_name == "so_no")
            {
                //如果你想复制第n行第1列的值：
                CopyColumnValueToClipboard(dgv_tran, i_temp, dgv_tran.CurrentCell.ColumnIndex);
            }
        }

        private void cbBox_push_TextChanged(object sender, EventArgs e)
        {
            //if (cbBox_push.Text.Trim() == "未推送")
            //{

            //    chkBox_bhday.Checked = false;
            //}
        }

        private void chkBox_bhday_CheckedChanged(object sender, EventArgs e)
        {
            //if (chkBox_bhday.Checked && cbBox_push.Text.Trim() == "未推送")
            //{
            //    cbBox_push.SelectedIndex = 0;
            
            //}
        }

        private void btn_q_sku_Click(object sender, EventArgs e)
        {
            w_query_batch wsingle = new w_query_batch();
            wsingle.ShowDialog();
            this.tb_sku.Text = w_query_batch.str_qcontent;
        }

        private void dgv_tran_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //自动编号，与数据无关
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
               e.RowBounds.Location.Y,
               dgv_tran.RowHeadersWidth - 4,
               e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,
                  (e.RowIndex + 1).ToString(),
                   dgv_tran.RowHeadersDefaultCellStyle.Font,
                   rectangle,
                   dgv_tran.RowHeadersDefaultCellStyle.ForeColor,
                   TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        // 删除行
        private void dgv_tran_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ContextMenu m = new ContextMenu(); // 创建一个 ContextMenu
                MenuItem deleteRowItem = new MenuItem("删除行"); // 创建一个 MenuItem
                deleteRowItem.Click += dgv_tran_DeleteRowItem_Click; // 添加点击事件
                m.MenuItems.Add(deleteRowItem);

                int currentMouseOverRow = dgv_tran.HitTest(e.X, e.Y).RowIndex;   // 将 MenuItem 添加到 ContextMenu
                m.Show(dgv_tran, new Point(e.X, e.Y));                           // 显示 ContextMenu
            }
        }

        private void dgv_tran_DeleteRowItem_Click(object sender, EventArgs e)
        {

            w_dgv_deleterow wsingle = new w_dgv_deleterow();
            wsingle.ShowDialog();
            int i_row_start = w_dgv_deleterow.i_row_start - 1;
            int i_row_end = w_dgv_deleterow.i_row_end - 1;

            // 确保起始行和结束行在有效范围内
            if (i_row_start < 0) return;
            if (i_row_end >= dgv_tran.Rows.Count || i_row_start > i_row_end)
            {
                MessageBox.Show("超出有效范围！");
                return;
            }

            // 从 DataGridView 中删除指定范围的行 (从后向前删除行，避免索引变化问题)
            for (int i = i_row_end; i >= i_row_start; i--)
            {
                dgv_tran.Rows.RemoveAt(i);
            }

        }
    }
}